package GUI;

import java.util.Collection;
import java.util.Date;
import java.util.Scanner;

import org.hibernate.HibernateException;

import ClassesBasicas.Convenio;
import ClassesBasicas.Endereco;
import ClassesBasicas.ITipoPessoa;
import ClassesBasicas.Paciente;
import Excecao.ConvenioInexistenteException;
import Excecao.PessoaExistenteException;
import Excecao.PessoaInexistenteException;
import Negocio.Fachada;

public class MenuCadastoPaciente implements ITipoPessoa {

	public static void telaPaciente() throws PessoaInexistenteException, ConvenioInexistenteException{

		Scanner opcao = new Scanner(System.in);
		int op;
		do {
			System.out.println("                                             __________________________________________________________");
			System.out.println("");
			System.out.println("                                                        # SISTEMA DE PRONTUARIO ELETRONICO #");
			System.out.println("                                             __________________________________________________________");
			System.out.println("");
			System.out.println("");
			System.out.println("                                                               MENU CADASTRO PACIENTE");
			System.out.println("");
			System.out.println("                                                      Inserir..................................1");
			System.out.println("                                                      Remover..................................2");
			System.out.println("                                                      Consultar................................3");
			System.out.println("                                                      Alterar..................................4");
			System.out.println("                                                      Listar...................................5");
			System.out.println("                                                      Voltar...................................0");
			System.out.println("");
			System.out.println("");
			System.out.print("                                                     > Selecione sua opcao:");
			op = opcao.nextInt();
			if (op ==1){
				inserirPaciente("INSERIR");
			}else if (op == 2){
				excluirPaciente("EXCLUIR");
			}else if (op ==3){
				consultarPaciente();
			}else if (op ==4){
				alterarPaciente();
			}else if(op == 5){
				listarPacientes();
			}else{
				System.out.println("                                                   Opcao Invalida! Favor Digitar Novamente.");
			}
		}while (op!=0);
	}

	@SuppressWarnings("unchecked")
	private static void listarPacientes() {
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("                                                        # SISTEMA DE PRONTUARIO ELETRONICO #");
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("");
		System.out.println("                                                                      LISTAR");
		Collection <Paciente> lista = (Collection<Paciente>) Fachada.obterInstancia().listar(PACIENTE);
		for(Paciente p : lista){
			System.out.print("                                                            Prontuario:");
			System.out.println(p.getCodigo());
			System.out.print("                                                            Nome:");
			System.out.println(p.getNome());
			System.out.print("                                                            CPF:");
			System.out.println(p.getCpf());
			System.out.print("                                                            Data Nascimento:");
			System.out.println(p.getDataNascimento());
			System.out.print("                                                            Sexo:");
			System.out.println(p.getSexo());
			System.out.print("                                                            Convenio:");
			System.out.println(p.getConvenio().getNome());
			System.out.print("                                                            Logradouro:");
			System.out.print(p.getEndereco().getLogradouro());
			System.out.print("                                                            Bairro:");
			System.out.println(p.getEndereco().getBairro());
			System.out.println("");
			System.out.println("");
		}

	}

	@SuppressWarnings("deprecation")
	public static void inserirPaciente(String titulo){		
		if (titulo==null)
			titulo ="INSERIR";
		Scanner opcao = new Scanner(System.in);
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("                                                        # SISTEMA DE PRONTUARIO ELETRONICO #");
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("");
		System.out.println("                                                                    "+titulo);
		System.out.println("");
		System.out.print("                                                            Nome:");
		String nome = opcao.nextLine();
		System.out.print("                                                            CPF:");
		String cpf = opcao.nextLine();
		System.out.print("                                                            Data Nascimento:");
		String dataNascimento = opcao.nextLine();
		System.out.print("                                                            Sexo:");
		String sexo = opcao.nextLine();
		System.out.print("                                                            Logradouro:");
		String logradouro = opcao.nextLine();
		System.out.print("                                                            Numero:");
		String numero = opcao.nextLine();
		System.out.print("                                                            Bairro:");
		String bairro = opcao.nextLine();
		System.out.print("                                                            Cidade:");
		String cidade = opcao.nextLine();
		System.out.print("                                                            CEP:");
		String cep = opcao.nextLine();
		System.out.print("                                                            Ponto de Referencia:");
		String pontoReferencia = opcao.nextLine();
		System.out.print("                                                            Nome do convenio:");
		String nomeConvenio = opcao.nextLine();


		Endereco endereco = new Endereco(logradouro.toUpperCase(), Integer.parseInt(numero), bairro.toUpperCase(), cep, cidade.toUpperCase(), pontoReferencia.toUpperCase());

		Convenio convenio = null;

		Fachada f1 = Fachada.obterInstancia();

		int dia = Integer.parseInt(dataNascimento.substring(0,2));
		int mes = Integer.parseInt(dataNascimento.substring(2,4));
		int ano = Integer.parseInt(dataNascimento.substring(4,8));
		Date date = new Date();
		date.setDate(dia);  
		date.setMonth(mes);
		date.setYear(ano);

		try {
			convenio = f1.procurarConvenioNome(nomeConvenio);
			Paciente paciente =  new Paciente(nome.toUpperCase(), cpf, sexo.charAt(0), 
											  date, endereco, convenio );
			f1.cadastrar(paciente, PACIENTE);
			System.out.println("Paciente inserido com sucesso !");
		} catch (ConvenioInexistenteException e) {
			System.err.println(e);
		} catch (PessoaExistenteException e) {
			System.err.println(e.getMessage());					
		}catch(HibernateException e){
			System.err.println(e.getMessage());
		}
	}		

	public static void excluirPaciente(String titulo) throws PessoaInexistenteException{
		Scanner opcao = new Scanner(System.in);
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("                                                        # SISTEMA DE PRONTUARIO ELETRONICO #");
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("                                 										"+titulo);
		System.out.println("");
		System.out.println("");
		System.out.print("                                                            Digite o cpf referente:");
		String cpf = opcao.nextLine();
		Fachada f1 = Fachada.obterInstancia();
		try {
			f1.remover(cpf, PACIENTE);
			System.out.println("Paciente removido com sucesso!");
		} catch(PessoaInexistenteException ex){
			System.err.println(ex);
		}
	}

	@SuppressWarnings( "deprecation")
	public static void alterarPaciente() throws PessoaInexistenteException{
		Scanner opcao = new Scanner(System.in);
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("                                                        # SISTEMA DE PRONTUARIO ELETRONICO #");
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("");
		System.out.println("                                                                        ALTERAR");
		System.out.print("");
		System.out.println("                                                            Digite o cpf referente:");
		String cpf = opcao.nextLine();
		try {
			@SuppressWarnings("unused")
			Paciente procurar = (Paciente) Fachada.obterInstancia().procurar(cpf, PACIENTE);
			System.out.print("                                                            Nome:");
			String nome = opcao.nextLine();
			System.out.print("                                                            Data Nascimento:");
			String dataNascimento = opcao.nextLine();
			System.out.print("                                                            Sexo:");
			String sexo = opcao.nextLine();
			System.out.print("                                                            Logradouro:");
			String logradouro = opcao.nextLine();
			System.out.print("                                                            Numero:");
			String numero = opcao.nextLine();
			System.out.print("                                                            Bairro:");
			String bairro = opcao.nextLine();
			System.out.print("                                                            Cidade:");
			String cidade = opcao.nextLine();
			System.out.print("                                                            CEP:");
			String cep = opcao.nextLine();
			System.out.print("                                                            Ponto de Referencia:");
			String pontoReferencia = opcao.nextLine();
			System.out.print("                                                            Nome do convenio:");
			String nomeConvenio = opcao.nextLine();

			int dia = Integer.parseInt(dataNascimento.substring(0,2));
			int mes = Integer.parseInt(dataNascimento.substring(2,4));
			int ano = Integer.parseInt(dataNascimento.substring(4,8));
			Date date = new Date();

			date.setDate(dia);  
			date.setMonth(mes);
			date.setYear(ano);


			Endereco endereco = new Endereco(logradouro.toUpperCase(), Integer.parseInt(numero), cep, 
											 bairro.toUpperCase(), pontoReferencia.toUpperCase(), 
											 cidade.toUpperCase());
			Convenio convenio = ((Convenio) Fachada.obterInstancia().procurarConvenio(nomeConvenio));
			Paciente atualizado = new Paciente(nome.toUpperCase(), cpf, sexo.charAt(0), 
											   date, endereco, convenio );
			Fachada.obterInstancia().atualizar(atualizado, PACIENTE);
			System.out.println("Paciente alterado com sucesso!");
		} catch (ConvenioInexistenteException e) {
			e.getMessage();		
		} catch(PessoaInexistenteException ex){
			System.err.println(ex);
		}
	}


	public static void consultarPaciente(){
		Scanner opcao = new Scanner(System.in);
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("                                                        # SISTEMA DE PRONTUARIO ELETRONICO #");
		System.out.println("                                             __________________________________________________________");
		System.out.println("");
		System.out.println("");
		System.out.println("                                                                     CONSULTAR");
		System.out.println("");
		System.out.print("                                                            Digite o cpf Paciente:");
		String cpf = opcao.nextLine();

		try {
			Paciente paciente = (Paciente) Fachada.obterInstancia().procurar(cpf, PACIENTE);
			System.out.print("                                                            Prontuario:");
			System.out.println(paciente.getCodigo());
			System.out.print("                                                            Nome:");
			System.out.println(paciente.getNome());
			System.out.print("                                                            CPF:");
			System.out.println(paciente.getCpf());
			System.out.print("                                                            Data Nascimento:");
			System.out.println(paciente.getDataNascimento());
			System.out.print("                                                            Codigo:");
			System.out.println(paciente.getCodigo());
			System.out.print("                                                            Sexo:");
			System.out.println(paciente.getSexo());
			System.out.print("                                                            Convenio:");
			System.out.println(paciente.getConvenio().getNome());
			System.out.print("                                                            Bairro:");
			System.out.println(paciente.getEndereco().getBairro());
			System.out.print("                                                            Logradouro:");
			System.out.print(paciente.getEndereco().getLogradouro());
		} catch (PessoaInexistenteException e) {
			System.err.println(e);
		}
	}	
}